home *** CD-ROM | disk | FTP | other *** search
/ Aminet 30 / Aminet 30 (1999)(Schatztruhe)[!][Apr 1999].iso / Aminet / dev / cross / GBDK-2.0.lha / GBDK / include / gb.h < prev    next >
C/C++ Source or Header  |  1998-11-25  |  6KB  |  333 lines

  1. #ifndef _GB_H
  2. #define _GB_H
  3.  
  4. #include <types.h>
  5. #include <hardware.h>
  6. #include <sgb.h>
  7. #include <cgb.h>
  8.  
  9. /* Joypad bits */
  10.  
  11. #define    J_START      0x80U
  12. #define    J_SELECT     0x40U
  13. #define    J_B          0x20U
  14. #define    J_A          0x10U
  15. #define    J_DOWN       0x08U
  16. #define    J_UP         0x04U
  17. #define    J_LEFT       0x02U
  18. #define    J_RIGHT      0x01U
  19.  
  20. /* Modes */
  21.  
  22. #define    M_DRAWING    0x01U
  23. #define    M_TEXT_OUT   0x02U
  24. #define    M_TEXT_INOUT 0x03U
  25.  
  26. /* Sprite properties bits */
  27.  
  28. #define S_PALETTE    0x10U
  29. #define S_FLIPX      0x20U
  30. #define S_FLIPY      0x40U
  31. #define S_PRIORITY   0x80U
  32.  
  33. /* Interrupt flags */
  34.  
  35. #define VBL_IFLAG    0x01U
  36. #define LCD_IFLAG    0x02U
  37. #define TIM_IFLAG    0x04U
  38. #define SIO_IFLAG    0x08U
  39. #define JOY_IFLAG    0x10U
  40.  
  41. /* Limits */
  42.  
  43. #define SCREENWIDTH  0xA0U
  44. #define SCREENHEIGHT 0x90U
  45. #define MINWNDPOSX   0x07U
  46. #define MINWNDPOSY   0x00U
  47. #define MAXWNDPOSX   0xA6U
  48. #define MAXWNDPOSY   0x8FU
  49.  
  50. /* ************************************************************ */
  51.  
  52. /*
  53.  * Interrupt handlers
  54.  */
  55. typedef void (*int_handler)(void);
  56.  
  57. void
  58. add_VBL(int_handler h);
  59.  
  60. void
  61. add_LCD(int_handler h);
  62.  
  63. void
  64. add_TIM(int_handler h);
  65.  
  66. void
  67. add_SIO(int_handler h);
  68.  
  69. void
  70. add_JOY(int_handler h);
  71.  
  72. /* ************************************************************ */
  73.  
  74. void
  75. mode(UBYTE m);
  76.  
  77. /* GB type (GB, PGB, CGB) */
  78. extern UBYTE _cpu;
  79.  
  80. #define DMG_TYPE 0x01 /* Original GB or Super GB */
  81. #define MGB_TYPE 0xFF /* Pocket GB or Super GB 2 */
  82. #define CGB_TYPE 0x11 /* Color GB */
  83.  
  84. /* ************************************************************ */
  85.  
  86. void
  87. send_byte(void);
  88. /* Send byte in _io_out to the serial port */
  89.  
  90. void
  91. receive_byte(void);
  92. /* Receive byte from the serial port in _io_in */
  93.  
  94. extern UBYTE _io_status;
  95. extern UBYTE _io_in;
  96. extern UBYTE _io_out;
  97.  
  98. /* Status codes */
  99. #define IO_IDLE        0x00U        /* IO is completed */
  100. #define IO_SENDING    0x01U        /* Sending data */
  101. #define IO_RECEIVING    0x02U        /* Receiving data */
  102. #define IO_ERROR    0x04U        /* Error */
  103.  
  104. /* ************************************************************ */
  105.  
  106. /* Multiple banks */
  107.  
  108. /* MBC1 */
  109. #define SWITCH_ROM_MBC1(b) \
  110.   *(unsigned char *)0x2000 = (b)
  111.  
  112. #define SWITCH_RAM_MBC1(b) \
  113.   *(unsigned char *)0x4000 = (b)
  114.  
  115. #define ENABLE_RAM_MBC1 \
  116.   *(unsigned char *)0x0000 = 0x0A
  117.  
  118. #define DISABLE_RAM_MBC1 \
  119.   *(unsigned char *)0x0000 = 0x00
  120.  
  121. /* MBC5 */
  122. #define SWITCH_ROM_MBC5(b) \
  123.   *(unsigned char *)0x2000 = (b)&0xFF; \
  124.   *(unsigned char *)0x3000 = (b)>>8
  125.  
  126. #define SWITCH_RAM_MBC5(b) \
  127.   *(unsigned char *)0x4000 = (b)
  128.  
  129. #define ENABLE_RAM_MBC5 \
  130.   *(unsigned char *)0x0000 = 0x0A
  131.  
  132. #define DISABLE_RAM_MBC5 \
  133.   *(unsigned char *)0x0000 = 0x00
  134.  
  135. /* ************************************************************ */
  136.  
  137. void
  138. delay(UWORD d);
  139.  
  140. /* ************************************************************ */
  141.  
  142. UBYTE
  143. joypad(void);
  144.  
  145. UBYTE
  146. waitpad(UBYTE mask);
  147.  
  148. void
  149. waitpadup(void);
  150.  
  151. /* ************************************************************ */
  152.  
  153. void
  154. enable_interrupts(void);
  155.  
  156. void
  157. disable_interrupts(void);
  158.  
  159. void
  160. set_interrupts(UBYTE flags);
  161.  
  162. void
  163. reset(void);
  164.  
  165. void
  166. wait_vbl_done(void);
  167.  
  168. void
  169. display_off(void);
  170.  
  171. /* ************************************************************ */
  172.  
  173. void
  174. hiramcpy(UBYTE dst,
  175.      const void *src,
  176.      UBYTE n);
  177.  
  178. /* ************************************************************ */
  179.  
  180. #define DISPLAY_ON \
  181.   LCDC_REG|=0x80U
  182.  
  183. #define DISPLAY_OFF \
  184.   display_off();
  185.  
  186. #define SHOW_BKG \
  187.   LCDC_REG|=0x01U
  188.  
  189. #define HIDE_BKG \
  190.   LCDC_REG&=0xFEU
  191.  
  192. #define SHOW_WIN \
  193.   LCDC_REG|=0x20U
  194.  
  195. #define HIDE_WIN \
  196.   LCDC_REG&=0xDFU
  197.  
  198. #define SHOW_SPRITES \
  199.   LCDC_REG|=0x02U
  200.  
  201. #define HIDE_SPRITES \
  202.   LCDC_REG&=0xFDU
  203.  
  204. #define SPRITES_8x16 \
  205.   LCDC_REG|=0x04U
  206.  
  207. #define SPRITES_8x8 \
  208.   LCDC_REG&=0xFBU
  209.  
  210. /* ************************************************************ */
  211.  
  212. void
  213. set_bkg_data(UBYTE first_tile,
  214.          UBYTE nb_tiles,
  215.          unsigned char *data);
  216.  
  217. void
  218. set_bkg_tiles(UBYTE x,
  219.           UBYTE y,
  220.           UBYTE w,
  221.           UBYTE h,
  222.           unsigned char *tiles);
  223.  
  224. void
  225. get_bkg_tiles(UBYTE x,
  226.           UBYTE y,
  227.           UBYTE w,
  228.           UBYTE h,
  229.           unsigned char *tiles);
  230.  
  231. void
  232. move_bkg(UBYTE x,
  233.      UBYTE y);
  234.  
  235. void
  236. scroll_bkg(BYTE x,
  237.        BYTE y);
  238.  
  239. /* ************************************************************ */
  240.  
  241. void
  242. set_win_data(UBYTE first_tile,
  243.          UBYTE nb_tiles,
  244.          unsigned char *data);
  245.  
  246. void
  247. set_win_tiles(UBYTE x,
  248.           UBYTE y,
  249.           UBYTE w,
  250.           UBYTE h,
  251.           unsigned char *tiles);
  252.  
  253. void
  254. get_win_tiles(UBYTE x,
  255.           UBYTE y,
  256.           UBYTE w,
  257.           UBYTE h,
  258.           unsigned char *tiles);
  259.  
  260. void
  261. move_win(UBYTE x,
  262.      UBYTE y);
  263.  
  264. void
  265. scroll_win(BYTE x,
  266.        BYTE y);
  267.  
  268. /* ************************************************************ */
  269.  
  270. void
  271. set_sprite_data(UBYTE first_tile,
  272.         UBYTE nb_tiles,
  273.         unsigned char *data);
  274.  
  275. void
  276. get_sprite_data(UBYTE first_tile,
  277.         UBYTE nb_tiles,
  278.         unsigned char *data);
  279.  
  280. void
  281. set_sprite_tile(UBYTE nb,
  282.         UBYTE tile);
  283.  
  284. UBYTE
  285. get_sprite_tile(UBYTE nb);
  286.  
  287. void
  288. set_sprite_prop(UBYTE nb,
  289.         UBYTE prop);
  290.  
  291. UBYTE
  292. get_sprite_prop(UBYTE nb);
  293.  
  294. void
  295. move_sprite(UBYTE nb,
  296.         UBYTE x,
  297.         UBYTE y);
  298.  
  299. void
  300. scroll_sprite(BYTE nb,
  301.           BYTE x,
  302.           BYTE y);
  303.  
  304. /* ************************************************************ */
  305.  
  306. void
  307. set_data(unsigned char *vram_addr,
  308.      unsigned char *data,
  309.      UWORD len);
  310.  
  311. void
  312. get_data(unsigned char *data,
  313.      unsigned char *vram_addr,
  314.      UWORD len);
  315.  
  316. void
  317. set_tiles(UBYTE x,
  318.       UBYTE y,
  319.       UBYTE w,
  320.       UBYTE h,
  321.       unsigned char *vram_addr,
  322.       unsigned char *tiles);
  323.  
  324. void
  325. get_tiles(UBYTE x,
  326.       UBYTE y,
  327.       UBYTE w,
  328.       UBYTE h,
  329.       unsigned char *tiles,
  330.       unsigned char *vram_addr);
  331.  
  332. #endif /* _GB_H */
  333.